package com.firer.test;

import android.support.v7.widget.RecyclerView;
import android.util.SparseBooleanArray;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by root on 16-2-15.
 */
public abstract class SelectableAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH>{
    private SparseBooleanArray selectedItems;

    public SelectableAdapter() {
        selectedItems = new SparseBooleanArray();
    }

    public List<Integer> getSelectedItems() {
        List<Integer> items = new ArrayList<>(selectedItems.size());
        for(int i=0; i< selectedItems.size(); i++) {
            items.add(selectedItems.keyAt(i));
        }
        return items;
    }

    public int getSelectedItemCount() {
        return selectedItems.size();
    }

    public void clearSelection() {
        List<Integer> selection = getSelectedItems();
        selectedItems.clear();
        for(Integer i : selection) {
            notifyItemChanged(i);
        }
    }

    public void toggleSelection(int pos) {
        if(selectedItems.get(pos,false)) {
            selectedItems.delete(pos);
        } else {
            selectedItems.put(pos,true);
        }
        notifyItemChanged(pos);
    }

    public boolean isSelected(int pos) {
        return getSelectedItems().contains(pos);
    }
}
//public abstract class SelectableAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
//    private SparseBooleanArray selectedItems;
//
//    public SelectableAdapter() {
//        selectedItems = new SparseBooleanArray();
//    }
//
//    public boolean isSelected(int position) {
//        return getSelectedItems().contains(position);
//    }
//
//    /**
//     * Toggle the selection status of the item at a given position
//     * @param position Position of the item to toggle the selection status for
//     */
//    public void toggleSelection(int position) {
//        if (selectedItems.get(position, false)) {
//            selectedItems.delete(position);
//        } else {
//            selectedItems.put(position, true);
//        }
//        notifyItemChanged(position);
//    }
//
//    /**
//     * Clear the selection status for all items
//     */
//    public void clearSelection() {
//        List<Integer> selection = getSelectedItems();
//        selectedItems.clear();
//        for (Integer i : selection) {
//            notifyItemChanged(i);
//        }
//    }
//
//    /**
//     * Count the selected items
//     * @return Selected items count
//     */
//    public int getSelectedItemCount() {
//        return selectedItems.size();
//    }
//
//    /**
//     * Indicates the list of selected items
//     * @return List of selected items ids
//     */
//    public List<Integer> getSelectedItems() {
//        List<Integer> items = new ArrayList<>(selectedItems.size());
//        for (int i = 0; i < selectedItems.size(); ++i) {
//            items.add(selectedItems.keyAt(i));
//        }
//        return items;
//    }
//}